package com.ccit.paas.rpc.enums;


/**
 * 前端返回码定义
 *
 * @author: chinacoalit.com
 * @date 2024/1/9 15:56
 * @version: v1.0 初始化
 */
public enum ErrorCode {

    // 系统通用
    SUCCESS(200, "success"),
    ERROR(500, "error"),

    SERVICE_UNAVAILABLE(503, "服务暂时不可用"),
    TOKEN_EXPIRED(401, "身份令牌已过期，请重新登录"),
    PERMISSION_DENIED(403, "没有操作权限"),
    RESOURCE_NOT_FOUND(404, "请求的资源不存在"),
    METHOD_NOT_ALLOWED(405, "不支持的请求方法"),

    // 参数相关
    PARAM_ERROR(1000, "参数校验失败"),
    PARAM_EMPTY(1001, "参数不能为空"),
    PARAM_FORMAT_ERROR(1002, "参数格式不正确"),
    PARAM_OUT_OF_RANGE(1003, "参数值超出有效范围"),

    // 业务通用
    OPERATE_FAILED(2000, "操作失败"),
    DATA_EXIST(2001, "数据已存在，无法重复创建"),
    DATA_NOT_EXIST(2002, "数据不存在或已被删除"),
    DATA_USED(2003, "数据正在被使用，无法删除"),
    VERSION_CONFLICT(2004, "数据版本冲突，请刷新后重试");


    /**
     * 枚举值
     */
    private final Integer code;

    /**
     * 枚举描述
     */
    private final String message;

    /**
     * 构造方法
     *
     * @param code    编码
     * @param message 消息
     */
    ErrorCode(Integer code, String message) {
        this.code = code;
        this.message = message;
    }


    public Integer getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }


    /**
     * 通过code获取msg
     *
     * @param code 编码
     * @return java.lang.String
     * @throws
     * @author chinacoalit.com
     * @date 2024/1/9 15:56
     */
    public static String getMsgByCode(Integer code) {
        if (code == null) {
            return null;
        }
        ErrorCode enumList = getByCode(code);
        if (enumList == null) {
            return null;
        }
        return enumList.getMessage();
    }

    /**
     * 根据编码获取对象
     *
     * @param code 编码
     * @return com.ccit.wf.ENUM.ErrorCode
     * @throws
     * @author chinacoalit.com
     * @date 2024/1/9 15:57
     */
    public static ErrorCode getByCode(Integer code) {

        for (ErrorCode enumList : values()) {

            if (enumList.getCode().equals(code)) {
                return enumList;
            }
        }
        return null;
    }
}
